#include "Simulacao.h"
#include <time.h>

using namespace Simulador;

Simulacao::~Simulacao (){
    
}

void Simulacao::run () {
    
    unsigned int numEventos(0);
    
    //instanciando o Publisher e vetores de Seeds e Peers
    P_Publisher publisher(new Publisher(blocos, taxaPublisher));
    
    while (rodadaAtual <= NUMRODADAS) {
        
        while (numEventos < QTDEVENTOS) {
            //polling de eventos    
            
        }
        
        numEventos = 0;
        rodadaAtual++;
    }
}

void Simulacao::setEvento (EVENTO ev) {
    
    listaEventos.push_back(ev);
    //sort baseado em q? soh fiz overloading do operador <
    //o ideal seria inserir ja ordenando
    listaEventos.sort();
}


/*	//Inicializa vetor de disponiblilidade sem considerar o publisher
	for(int i =0; i<blocos;i++){
		disponibilidadeBlocos[i]=0;
	}
    
    //instanciando o Publisher e vetores de Seeds e Peers
    P_Publisher publisher(new Publisher(blocos, taxaPublisher));
	boost::thread tPublisher(&IniciaPublisher, publisher);

	//funcao q gera Peers a cada 1 segundo (pra teste)
    boost::thread chegadaPeers(&ChegadaPeers, taxaPeerSeed, blocos);
	    
	while (rodadaAtual <= numRodadas) {
        
        //fazer calculos aqui
		Sleep(1000);

		{
			boost::mutex::scoped_lock l(mutexRodada);
			rodadaAtual++;
		}
    }

	//chegadaPeers.join();
}

void IniciaPublisher(P_Publisher publisher){
	publisher->run();
}

void ChegadaPeers(double mi, unsigned int blocos) {
    
    boost::xtime tempoInicio;
    boost::xtime tempoFim;
	clock_t testIni;
	double time;
    
    //boost::xtime_get(&tempoInicio, boost::TIME_UTC);
    
    
    while (true) {
    
		{
			boost::mutex::scoped_lock l(mutexRodada);
			globalPeers.push_back(P_Peer(new Peer(mi, blocos, rodadaAtual)));
		} 
		cout<<"Comecou o teste de tempo"<<endl;
		testIni = clock();
		boost::xtime_get(&tempoInicio, boost::TIME_UTC);
        boost::xtime_get(&tempoFim, boost::TIME_UTC);
        
        //se prende no while enquanto nao passar 1 segundo
		//porem, parece q esse .sec nao eh preciso! botei 10segs e vai em menos de 5!
		while ((tempoFim.sec - tempoInicio.sec) < 10) {        
                boost::xtime_get(&tempoFim, boost::TIME_UTC);
        }
		time = (1000*(clock()-testIni)/CLOCKS_PER_SEC);
		cout<<"Tempo decorrido "<<time<<" ms"<<endl;
        tempoInicio.sec += 10;
    }
    
    return;
} */